#ifndef CONVERT_H
#define CONVERT_H

#include "Ogre.h"
#include "btBulletCollisionCommon.h"
#include "btBulletDynamicsCommon.h"

inline btVector3 cvt(const Ogre::Vector3 &V){
    return btVector3(V.x, V.y, V.z);
};
 
inline Ogre::Vector3 cvt(const btVector3&V){
    return Ogre::Vector3(V.x(), V.y(), V.z());
};
 
inline btQuaternion cvt(const Ogre::Quaternion &Q)
{
    return btQuaternion(Q.x, Q.y, Q.z, Q.w);
};
 
inline Ogre::Quaternion cvt(const btQuaternion &Q)
{
    return Ogre::Quaternion(Q.w(), Q.x(), Q.y(), Q.z());
};
 
inline btMatrix3x3 cvt(const Ogre::Matrix3 &M)
{
	return btMatrix3x3(M[0][0],M[0][1],M[0][2],M[1][0],M[1][1],M[1][2],M[2][0],M[2][1],M[2][2]);
};

inline btTransform cvt(const Ogre::Quaternion &orien, const Ogre::Vector3 &pos)
{
	btVector3 btPos(pos.x ,pos.y, pos.z);
	btQuaternion quat(orien.x,
		orien.y,
		orien.z,
		orien.w);
	return btTransform(quat,btPos);
};

inline btTransform cvt(const Ogre::Matrix4 &mat)
{
	Ogre::Quaternion orien = mat.extractQuaternion();
	Ogre::Vector3 pos = mat.getTrans();
	btVector3 btPos(pos.x, pos.y, pos.z);
	btQuaternion quat(orien.x,
		orien.y,
		orien.z,
		orien.w);
	return btTransform(quat,btPos);
};

#endif